--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_map_data_manager.py HEAD (2bf00cb3) Text, 12.34 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787base64
Tff7b72import T7ee787json
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMockTb4b4b4, Te6edf3patch
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_data_manager Tff7b72import Tb4b4b4(
Te6edf3MAP_ASPECTTb4b4b4,
Te6edf3MapDataErrorTb4b4b4,
Te6edf3MapDataManagerTb4b4b4,
Te6edf3coerce_map_request_bodyTb4b4b4,
Te6edf3parse_map_data_app_dataTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_geo_validator Tff7b72import Te6edf3GeoValidationError
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_overlay_manager Tff7b72import Te6edf3MapOverlayManager
Te6edf3HASH Tff7b72= Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff16
Te6edf3GEOJSON Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFeatureCollectionTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFeatureTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffgeometryTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffPointTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcoordinatesTa5d6ff"Tb4b4b4: Tb4b4b4[T79c0ff1.0Tb4b4b4, T79c0ff2.0Tb4b4b4]Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3REMOTE_KML Tff7b72= Ta5d6ffbTa5d6ff"""Ta5d6ff<?xml version=Ta5d6ff"Ta5d6ff1.0Ta5d6ff"Ta5d6ff?>
Ta5d6ff<kml xmlns=Ta5d6ff"Ta5d6ffhttp://www.opengis.net/kml/2.2Ta5d6ff"Ta5d6ff><Document>
Ta5d6ff <Placemark><name>P</name>
Ta5d6ff <Style><IconStyle><Icon><href>https://evil.example/i.png</href></Icon></IconStyle></Style>
Ta5d6ff <Point><coordinates>1,2,0</coordinates></Point>
Ta5d6ff </Placemark>
Ta5d6ff</Document></kml>Ta5d6ff"""
Tff7b72class T56d364FakeValueTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3value
Tff7b72def Td2a8ffgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_value
Tff7b72def Td2a8ffsetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3value
Tff7b72class T56d364FakeConfigTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_overlay_max_bytes Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff8 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_max_features Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff50_000Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_max_kmz_uncompressed_bytes Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff16 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_max_sources Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff64Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_max_concurrent_jobs Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff2Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_path_timeout_seconds Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff30Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_transfer_timeout_seconds Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff120Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_job_timeout_seconds Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff300Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_max_retries Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_overlay_retry_delay_seconds Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_data_max_bytes Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff512 Tff7b72* T79c0ff1024Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_data_announce_enabled Tff7b72= Te6edf3FakeValueTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_data_announce_interval Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff900Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_data_display_name Tff7b72= Te6edf3FakeValueTb4b4b4(Ta5d6ff"Ta5d6ffCamp mapsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounce_store_map_data Tff7b72= Te6edf3FakeValueTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounce_max_stored_map_data Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff1000Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounce_fetch_limit_map_data Tff7b72= Te6edf3FakeValueTb4b4b4(T79c0ff500Tb4b4b4)
Tff7b72class T56d364FakeIdentityTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3HASHTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffdbTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3database Tff7b72= Te6edf3DatabaseTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdb.sqliteTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3databaseTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3database
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffmanagerTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3MapDataManagerTb4b4b4(
Te6edf3FakeConfigTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3dbTb4b4b4,
Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3FakeIdentityTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_parse_map_data_app_data_jsonTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3parsed Tff7b72= Te6edf3parse_map_data_app_dataTb4b4b4(Ta5d6ffbTa5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffvTa5d6ff"Ta5d6ff:1,Ta5d6ff"Ta5d6ffnTa5d6ff"Ta5d6ff:Ta5d6ff"Ta5d6ffCamp mapsTa5d6ff"Ta5d6ff,Ta5d6ff"Ta5d6ffcTa5d6ff"Ta5d6ff:3}Ta5d6ff'Tb4b4b4)
Tff7b72assert Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffnTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCamp mapsTa5d6ff"
Tff7b72assert Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff3
Tff7b72def Td2a8fftest_parse_map_data_app_data_truncates_nameTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3parsed Tff7b72= Te6edf3parse_map_data_app_dataTb4b4b4(
Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffvTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4, Ta5d6ff"Ta5d6ffnTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffxTa5d6ff" Tff7b72* T79c0ff80Tb4b4b4, Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffnTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff32
Tff7b72def Td2a8fftest_publish_stores_sanitized_geojsonTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3row Tff7b72= Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCampTa5d6ff"
Tff7b72assert Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"
Tff7b72assert Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6fffeature_countTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1
Te6edf3listed Tff7b72= Te6edf3managerTff7b72.Td2a8fflist_publishedTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3listedTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3listedTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_idTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffmap_idTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8fftest_publish_strips_remote_kml_hrefTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3REMOTE_KMLTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6fflayerTa5d6ff"Tb4b4b4, Te6edf3hinted_formatTff7b72=Ta5d6ff"Ta5d6ffkmlTa5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffremote_hrefTa5d6ff" Tff7b72in Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffstrippedTa5d6ff"Tb4b4b4]
Te6edf3abs_path Tff7b72= Te6edf3managerTff7b72.Td2a8ffdata_rootTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72+ Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4]
Tff7b72with Tffa657openTb4b4b4(Te6edf3abs_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fhTb4b4b4:
Te6edf3body Tff7b72= Te6edf3fhTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ffbTa5d6ff"Ta5d6ffhttps://evil.exampleTa5d6ff" Tff7b72not Tff7b72in Te6edf3body
Tff7b72def Td2a8fftest_publish_rejects_oversizedTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffconfigTff7b72.Td2a8ffmap_data_max_bytesTff7b72.Td2a8ffsetTb4b4b4(T79c0ff64 Tff7b72* T79c0ff1024Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3MapDataErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff{Ta5d6ff" Tff7b72+ Ta5d6ffbTa5d6ff"Ta5d6ffxTa5d6ff" Tff7b72* Tb4b4b4(T79c0ff65 Tff7b72* T79c0ff1024Tb4b4b4)Tb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffbigTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6fffile_too_largeTa5d6ff"
Tff7b72def Td2a8fftest_publish_rejects_emptyTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3GeoValidationErrorTb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffemptyTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_unpublish_removes_fileTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3map_id Tff7b72= Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_idTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3managerTff7b72.Td2a8ffunpublishTb4b4b4(Te6edf3map_idTb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3managerTff7b72.Td2a8fflist_publishedTb4b4b4(Tb4b4b4) Tff7b72== Tb4b4b4[Tb4b4b4]
Tff7b72assert Te6edf3managerTff7b72.Td2a8ffunpublishTb4b4b4(Te6edf3map_idTb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_catalog_payloadTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3payload Tff7b72= Te6edf3managerTff7b72.Td2a8ff_catalog_payloadTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3payloadTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCampTa5d6ff"
Tff7b72assert Te6edf3payloadTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"
Tff7b72def Td2a8fftest_stop_deregisters_destinationTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72= Te6edf3dest
Te6edf3managerTff7b72.Td2a8ff_running Tff7b72= Tff7b72True
Te6edf3managerTff7b72.Td2a8ff_registered_map_paths Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ff/map/aaaaaaaaaaaaaaaaTa5d6ff"Tb4b4b4}
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffderegister_destinationTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3deregTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffderegister_request_handlerTff7b72.Td2a8ffassert_any_callTb4b4b4(Ta5d6ff"Ta5d6ff/catalogTa5d6ff"Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffderegister_request_handlerTff7b72.Td2a8ffassert_any_callTb4b4b4(Ta5d6ff"Ta5d6ff/map/aaaaaaaaaaaaaaaaTa5d6ff"Tb4b4b4)
Te6edf3deregTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72is Tff7b72None
Tff7b72assert Te6edf3managerTff7b72.Td2a8ff_running Tff7b72is Tff7b72False
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_ingest_overlay_kind_map_dataTb4b4b4(Te6edf3managerTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3overlay Tff7b72= Te6edf3MapOverlayManagerTb4b4b4(
Te6edf3managerTff7b72.Td2a8ffconfigTb4b4b4,
Te6edf3dbTb4b4b4,
Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ff_overlay_manager_getter Tff7b72= Tff7b72lambdaTb4b4b4: Te6edf3overlay
Te6edf3published Tff7b72= Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3map_id Tff7b72= Te6edf3publishedTb4b4b4[Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_idTa5d6ff"Tb4b4b4]
Tff7b72async Tff7b72def Td2a8fffake_fetch_map_bytesTb4b4b4(Te6edf3_destTb4b4b4, Te6edf3_map_idTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3GEOJSON
Tff7b72async Tff7b72def Td2a8fffake_catalogTb4b4b4(Te6edf3_destTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3map_idTb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Te6edf3managerTff7b72.Td2a8fffetch_map_bytes Tff7b72= Te6edf3fake_fetch_map_bytes
Te6edf3managerTff7b72.Td2a8fffetch_catalog Tff7b72= Te6edf3fake_catalog
Te6edf3result Tff7b72= Tff7b72await Te6edf3managerTff7b72.Td2a8ffadd_as_overlayTb4b4b4(Te6edf3HASHTb4b4b4, Te6edf3map_idTb4b4b4)
Te6edf3overlay_row Tff7b72= Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffoverlayTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3overlay_rowTb4b4b4[Ta5d6ff"Ta5d6ffkindTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffmap_dataTa5d6ff"
Tff7b72assert Te6edf3overlay_rowTb4b4b4[Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffreadyTa5d6ff"
Tff7b72assert Te6edf3overlay_rowTb4b4b4[Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"
Tff7b72def Td2a8fftest_announce_app_data_is_slimTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16
Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72= Te6edf3dest
Te6edf3managerTff7b72.Td2a8ff_running Tff7b72= Tff7b72True
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ffconfigTff7b72.Td2a8ffmap_data_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3status Tff7b72= Te6edf3managerTff7b72.Td2a8ffannounceTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffannounceTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Te6edf3app_data Tff7b72= Te6edf3destTff7b72.Td2a8ffannounceTff7b72.Td2a8ffcall_argsTff7b72.Td2a8ffkwargsTb4b4b4[Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4]
Te6edf3parsed Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffvTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1
Tff7b72assert Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffnTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCamp mapsTa5d6ff"
Tff7b72assert Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3app_dataTb4b4b4) Tff7b72< T79c0ff128
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3MAP_ASPECT
Tff7b72def Td2a8fftest_list_heard_parses_slim_app_dataTb4b4b4(Te6edf3managerTb4b4b4, Te6edf3dbTb4b4b4)Tb4b4b4:
Te6edf3app Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffvTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4, Ta5d6ff"Ta5d6ffnTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCamp mapsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4: T79c0ff3Tb4b4b4}Tb4b4b4, Te6edf3separatorsTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3HASHTb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3MAP_ASPECTTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4: Te6edf3HASHTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_public_keyTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcHViTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4: Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(Te6edf3appTb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3heard Tff7b72= Te6edf3managerTff7b72.Td2a8fflist_heardTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3heardTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3heardTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_nameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCamp mapsTa5d6ff"
Tff7b72assert Te6edf3heardTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_countTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff3
Tff7b72def Td2a8ff_patch_destinationTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4:
Te6edf3real Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestination
Te6edf3patcher Tff7b72= Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.src.backend.map_data_manager.RNS.DestinationTa5d6ff"Tb4b4b4)
Te6edf3dest_cls Tff7b72= Te6edf3patcherTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Te6edf3dest_clsTff7b72.Td2a8ffIN Tff7b72= Te6edf3realTff7b72.Td2a8ffIN
Te6edf3dest_clsTff7b72.Td2a8ffSINGLE Tff7b72= Te6edf3realTff7b72.Td2a8ffSINGLE
Te6edf3dest_clsTff7b72.Td2a8ffALLOW_ALL Tff7b72= Te6edf3realTff7b72.Td2a8ffALLOW_ALL
Te6edf3dest_clsTff7b72.Td2a8ffapp_and_aspects_from_nameTff7b72.Td2a8ffreturn_value Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffmap-data-v1Ta5d6ff"Tb4b4b4, Tb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3dest_clsTff7b72.Td2a8ffreturn_value Tff7b72= Te6edf3dest
Tff7b72return Te6edf3patcherTb4b4b4, Te6edf3dest_cls
Tff7b72def Td2a8fftest_start_without_published_maps_does_not_create_destinationTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787eectT7ee787.T7ee787harness Tff7b72import Te6edf3eect_scenario
Tff7b72with Te6edf3eect_scenarioTb4b4b4(Ta5d6ff"Ta5d6ffmap.data.announce_opt_in_until_publishTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.map_data_manager.RNS.DestinationTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tf85149AssertionErrorTb4b4b4(Ta5d6ff"Ta5d6ffdestination must stay opt-inTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3status Tff7b72= Te6edf3managerTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72is Tff7b72None
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffrunningTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72False
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffpublished_countTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff0
Tff7b72assert Te6edf3statusTb4b4b4[Ta5d6ff"Ta5d6ffannounce_enabledTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_announce_refuses_when_nothing_publishedTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3MapDataErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffannounceTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6ffnothing_publishedTa5d6ff"
Tff7b72assert Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_publish_after_start_creates_destination_without_announceTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16
Te6edf3patcherTb4b4b4, Te6edf3dest_cls Tff7b72= Te6edf3_patch_destinationTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Te6edf3dest_clsTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3dest_clsTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffannounceTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffregister_request_handlerTff7b72.Td2a8ffassert_calledTb4b4b4(Tb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3patcherTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_publish_announces_when_enabledTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16
Te6edf3managerTff7b72.Td2a8ffconfigTff7b72.Td2a8ffmap_data_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3patcherTb4b4b4, Te6edf3_dest_cls Tff7b72= Te6edf3_patch_destinationTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffannounceTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffannounceTff7b72.Td2a8ffassert_calledTb4b4b4(Tb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3patcherTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_unpublish_last_map_tears_down_destinationTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3dest Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16
Te6edf3patcherTb4b4b4, Te6edf3_dest_cls Tff7b72= Te6edf3_patch_destinationTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72is Te6edf3dest
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Ta5d6ff"Ta5d6ffderegister_destinationTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3deregTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffunpublishTb4b4b4(Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_idTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3deregTff7b72.Td2a8ffassert_called_once_withTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72is Tff7b72None
Tff7b72finallyTb4b4b4:
Te6edf3patcherTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_catalog_responder_returns_json_bytesTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787eectT7ee787.T7ee787harness Tff7b72import Te6edf3eect_scenario
Tff7b72with Te6edf3eect_scenarioTb4b4b4(Ta5d6ff"Ta5d6ffmap.data.catalog_bytes_over_linkTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3body Tff7b72= Te6edf3managerTff7b72.Td2a8ff_catalog_responderTb4b4b4(Ta5d6ff"Ta5d6ff/catalogTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3bodyTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)
Te6edf3parsed Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3bodyTb4b4b4)
Tff7b72assert Te6edf3parsedTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCampTa5d6ff"
Tff7b72def Td2a8fftest_coerce_request_body_unwraps_list_payloadTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3raw Tff7b72= Ta5d6ffbTa5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffmapsTa5d6ff"Ta5d6ff:[]}Ta5d6ff'
Tff7b72assert Te6edf3coerce_map_request_bodyTb4b4b4(Te6edf3rawTb4b4b4) Tff7b72== Te6edf3raw
Tff7b72assert Te6edf3coerce_map_request_bodyTb4b4b4(Tb4b4b4[Te6edf3rawTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ffbTa5d6ff"Ta5d6ffcatalog.jsonTa5d6ff"Tb4b4b4}Tb4b4b4]Tb4b4b4) Tff7b72== Te6edf3raw
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3MapDataErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Te6edf3coerce_map_request_bodyTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72assert Te6edf3excTff7b72.Td2a8ffvalueTff7b72.Td2a8ffcode Tff7b72== Ta5d6ff"Ta5d6ffempty_responseTa5d6ff"
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_fetch_catalog_local_shortcutTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3published Tff7b72= Te6edf3managerTff7b72.Td2a8ffpublish_bytesTb4b4b4(Te6edf3GEOJSONTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4)
Te6edf3dest Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3destTff7b72.Td2a8ffhash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ff_destination Tff7b72= Te6edf3dest
Te6edf3managerTff7b72.Td2a8ff_running Tff7b72= Tff7b72True
Te6edf3result Tff7b72= Tff7b72await Te6edf3managerTff7b72.Td2a8fffetch_catalogTb4b4b4(Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4)
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3publishedTb4b4b4[Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffmap_idTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCampTa5d6ff"
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_link_request_accepts_list_wrapped_bytesTb4b4b4(Te6edf3managerTb4b4b4)Tb4b4b4:
Te6edf3body Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffaTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCampTa5d6ff"Tb4b4b4}Tb4b4b4]Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Tff7b72class T56d364LinkManagerTb4b4b4:
Tff7b72async Tff7b72def Td2a8ffopen_linkTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3_argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3_kwargsTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657objectTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72FalseTb4b4b4, Tff7b72None
Tff7b72def Td2a8ffrequestTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3_destTb4b4b4,
Te6edf3_aspectTb4b4b4,
Te6edf3_pathTb4b4b4,
Te6edf3_dataTb4b4b4,
Te6edf3on_responseTb4b4b4,
Te6edf3_on_failedTb4b4b4,
Te6edf3_on_progTb4b4b4,
Te6edf3timeoutTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72class T56d364ReceiptTb4b4b4:
Te6edf3response Tff7b72= Tb4b4b4[Te6edf3bodyTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ffbTa5d6ff"Ta5d6ffcatalog.jsonTa5d6ff"Tb4b4b4}Tb4b4b4]
Te6edf3on_responseTb4b4b4(Te6edf3ReceiptTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3managerTff7b72.Td2a8ff_link_manager_getter Tff7b72= Tff7b72lambdaTb4b4b4: Te6edf3LinkManagerTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Tff7b72await Te6edf3managerTff7b72.Td2a8fffetch_catalogTb4b4b4(Ta5d6ff"Ta5d6ffcdTa5d6ff" Tff7b72* T79c0ff16Tb4b4b4)
Tff7b72assert Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffCampTa5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────